package com.bfxy.rabbit.task.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ElasticJobConfig {

    String name();  // elasticjob的名称

    String cron() default ""; // cron表达式

    int shardingTotalCount() default 1; // 作业分片总数

    String shardingItemParameters() default "";

    String jobParameter() default ""; // 作业自定义参数

    /*
    是否开启任务执行失效转移，开启表示如果作业在一次任务执行中途宕机，
    允许将该次未完成的任务在另一作业节点上补偿执行
     */
    boolean failover() default false;

    /*
    是否开启错过任务重新执行
     */
    boolean misfire() default true;

    String description() default ""; // 作业描述信息

    boolean overwrite() default false;

    boolean streamingProcess() default false;

    String scriptCommandLine() default "";

    boolean monitorExecution() default false;

    // 监控相关
    public int monitorPort() default -1;	//must

    public int maxTimeDiffSeconds() default -1;	//must

    // 分片策略
    public String jobShardingStrategyClass() default "";	//must

    public int reconcileIntervalMinutes() default 10;	//must

    public String eventTraceRdbDataSource() default "";	//must

    public String listener() default "";	//must

    public boolean disabled() default false;	//must

    public String distributedListener() default "";

    public long startedTimeoutMilliseconds() default Long.MAX_VALUE;	//must

    public long completedTimeoutMilliseconds() default Long.MAX_VALUE;		//must

    public String jobExceptionHandler() default "com.dangdang.ddframe.job.executor.handler.impl.DefaultJobExceptionHandler";

    public String executorServiceHandler() default "com.dangdang.ddframe.job.executor.handler.impl.DefaultExecutorServiceHandler";

}
